package client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.*;

import common.Casella;
import common.Dinosauro;
import common.Player;



public class Graphical extends JFrame implements Visualization,Serializable {
	
	private String user,psw;
	private char n;
	private char[][] black;
	
	GridBagConstraints c = new GridBagConstraints();
	
	public int risp=0;
	private int[] a = new int[2];
	private int[] b = new int[3];
	private Inizia i;
	private Login l;
	private NonInPartita noninpartita;
	private CreazioneRazza creazione;
	private DisplayWindow displaywindow;
	private DisplayOk displayok;
	private DisplayError displayerror;
	private Mappagenerale mappa;
	private InPartita inpartita;
	private ListaDinosauri listadinovis;
	private VisualeDino visualedino;
	private StatoDino statodino;
	private CreaUtente creautente;
	private ListaDinoTutti listadinotutti;
	
	private VediClassifica vediclassifica;
	private ListaGiocatori listagiocatori;
	
	private ImageIcon isola=new ImageIcon( "isola.jpg");
	
	
	public Graphical(){
		
		super("L'isola dei Dinosauri");
		setExtendedState(MAXIMIZED_BOTH);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
				
		c.fill = GridBagConstraints.CENTER;
		
		black = new char [40][40];
		
		for(int x=0; x<40; x++)
			for(int y=0; y<40; y++)
				black[x][y]='b';
		
		PannelloSfondo pannello = new PannelloSfondo(new File("eraglaciale.jpg"));
		pannello.setLayout(new GridBagLayout());
		
		mappa = new Mappagenerale(black);
		pannello.add(mappa, c);	
		
		inpartita = new InPartita();
		c.fill = GridBagConstraints.EAST;
		pannello.add(inpartita, c);
		
		add(pannello, BorderLayout.CENTER);
		
		validate();
		pack();
		setVisible(true);	
	}

	@Override
	public int schermataIniziale() {
		i = new Inizia();
		risp = i.getRisp();
		return risp;
	}

	@Override
	public void schermataLogin() {
		l = new Login();
		setUser(l.getUser());
		setPsw(l.getPsw());
	}
	
	public void schermataCreaUtente() {
		creautente = new CreaUtente();
		setUser(creautente.getUser());
		setPsw(creautente.getPsw());
	}

	@Override
	public void schermataCreazioneRazza() {
		creazione = new CreazioneRazza();
		setUser(creazione.getRazza());
		if(creazione.getNutriz().equals("Erbivoro"))
			setN('e');
		else
			setN('c');
	}

	@Override
	public int schermataVcd() {
		risp = listadinovis.getRisp();
		return risp;
	}
	
	public int schermataVcd2() {
		risp = listadinotutti.getRisp();
		return risp;
	}

	@Override
	public int schermataInPartita() {
		risp = inpartita.getRisp();
		return risp;
	}

	@Override
	public int schermataNonInPartita() {
		noninpartita = new NonInPartita();
		risp = noninpartita.getRisp();
		return risp;
	}

	@Override
	public int[] schermataMuoviDinosauro() {
		b[0]=0;
		
		a = visualedino.getRisp();
		
		b[1]=a[0];
		b[2]=a[1];
		return b;
	}

	@Override
	public void display(String s) {
		displaywindow = new DisplayWindow(s);
	}
	
	@Override
	public void displayOk(String s) {
		displayok = new DisplayOk(s);
	}
	
	@Override
	public String getUser() {
		return user;
	}
	
	public void setUser(String user) {
		this.user = user;
	}

	@Override
	public String getPsw() {
		return psw;
	}
	
	public void setPsw(String psw) {
		this.psw = psw;
	}

	@Override
	public char getN() {
		return n;
	}
	
	public void setN(char n) {
		this.n = n;
	}

	@Override
	public void displayError(String s) {
		displayerror = new DisplayError(s);		
	}

	@Override
	public void displayMappa(char[][] m) {
		mappa.refreshMappa(m);
	}

	@Override
	public void displayListaDinosauri(ArrayList<Dinosauro> listadino) {
		int[] lista = new int[listadino.size()];
		for(int q=0; q<listadino.size();q++){
			lista[q]=listadino.get(q).getId();
			System.out.println(lista[q]);
		}		
		listadinovis = new ListaDinosauri(lista);
	}

	public void displayListaDinosauriGlobal(ArrayList<Dinosauro> listadino, String usr){
		int miei = 0;
		for(Dinosauro d:listadino){
			if(d.getNomepadrone().equals(usr))
				miei++;				
		}
		int[] mieiDino = new int[miei];
		int[] nonmieiDino = new int[listadino.size()-miei];
		int i=0,k=0;
		for(Dinosauro d:listadino){
			if(d.getNomepadrone().equals(usr)){
				System.out.println(""+d.getNomepadrone()+"  "+d.getId());
				mieiDino[i]=d.getId();
				i++;
			}
			else{
				nonmieiDino[k]=d.getId();
				k++;
			}
		}
		listadinotutti = new ListaDinoTutti(mieiDino, nonmieiDino);
	}
	
	@Override
	public void displayVistaLocale(int x, int y, int dimx, int dimy, Casella[][] vista) {
		visualedino = new VisualeDino(x,y,dimx,dimy,vista);	
	}

	@Override
	public void displayStatoDinosauro(Dinosauro dino) {
		statodino = new StatoDino(dino);
	}

	@Override
	public void displayListaGiocatori(ArrayList<Player> listagioca) {
		listagiocatori = new ListaGiocatori(listagioca);
	}

	@Override
	public void displayClassifica(ArrayList<Player> classifica) {
		vediclassifica = new VediClassifica(classifica);
	}
	
}
